ñ⁄éü
ÇÕÇ∂ÇflÇ…
System 7 Dialog Manager
åƒÇ—èoǵÉCÉìÉ^ÉtÉFÅ[ÉX
åƒÇ—èoǵÇÃégÇ¢ï˚
åãò_
|
DZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ÇÕÅAÉ_ÉCÉAÉçÉOÇÃä«óùÇóeà’Ç…Ç∑ÇÈÇΩÇfl
System 7.0 à»ç~ì±ì¸Ç≥ÇÍÇΩ Dialog Manager
åƒÇ—èoǵDžǬǢǃê‡ñæÇµÇ‹Ç∑ÅBDZÇÍÇégópÇ∑ÇÈÇΔÅASystem
ÇÃÇ≥NjǥNjǻÉTÅ[ÉrÉXÇåƒÇ—èoǵǃÅAÉ}ÉEÉXÉJÅ[É\ÉãÇÃí«ê’
(ǬNjÇËÅAñÓàÛÉJÅ[É\ÉãÇΔ I
ÉrÅ[ÉÄÉJÅ[É\Éãëäå›ÇÃïœçX)ÅAÉfÉtÉHÉãÉgÇéÛÇØì¸ÇÍÇÈÇΩÇflÇÃïWèÄìIÇ»ÉLÅ[ëÄçÏÇÃèàóùÅAdžÇÈÇ¢ÇÕÉ_ÉCÉAÉçÉOÇÃÉLÉÉÉìÉZÉãÇçsǧDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
|
ÇÕÇ∂ÇflÇ…
System 7.0
ÇÃÉäÉäÅ[ÉXÇΔÇΔLJDžÅAïWèÄÉ_ÉCÉAÉçÉOÇÃã@î\ÇçÏê¨Ç∑ÇÈDZÇΔÇ™ÉfÉxÉçÉbÉpÇ…ÇΔǡǃÇÊÇËóeà’Ç…Ç»ÇÈÇÊǧDžÅAÇ¢Ç≠ǬǩÇÃêVǵǢ
Dialog Manager åƒÇ—èoǵǙí«â¡Ç≥ÇÍNjǵÇΩÅB
DZÇÍÇÁÇÃåƒÇ—èoǵDžÇÊÇËÅAéüÇÃÇÊǧǻã@î\ÇÃçÏê¨Ç™óeà’Ç…Ç»ÇËNjǵÇΩÅB
- ÉfÉtÉHÉãÉgÉ{É^ÉìÇÃê›íË (return Ç®ÇÊÇ— enter
ÉLÅ[Ç…ëŒÇ∑ÇÈÉGÉCÉäÉAÉXÇÃçÏê¨ÇΔÉfÉtÉHÉãÉgÉ{É^ÉìÇàÕÇfiëæê¸ÇÃï`âÊ)
- ÉLÉÉÉìÉZÉãÉ{É^ÉìÇÃê›íË (esc ÉLÅ[ÇΔ command-.
ÉLÅ[Ç…ëŒÇ∑ÇÈÉGÉCÉäÉAÉXÇÃçÏê¨)
- ñÓàÛÉJÅ[É\ÉãÇΔ I
ÉrÅ[ÉÄÉJÅ[É\ÉãÇëäå›Ç…ïœçXÇ∑ÇÈÇΩÇflÇÃÉJÅ[É\ÉãÇÃí«ê’
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
System 7
Dialog Manager åƒÇ—èoǵÉCÉìÉ^ÉtÉFÅ[ÉX
êVǵǢåƒÇ—èoǵÇÕéüÇÃí ÇËÇ≈Ç∑ÅB
/* These are copied from Universal Headers 3.1 */
EXTERN_API( Boolean )
StdFilterProc (DialogPtr theDialog,
EventRecord * event,
DialogItemIndex * itemHit);
EXTERN_API( OSErr )
GetStdFilterProc (ModalFilterUPP * theProc);
EXTERN_API( OSErr )
SetDialogDefaultItem (DialogPtr theDialog,
DialogItemIndex newItem);
EXTERN_API( OSErr )
SetDialogCancelItem (DialogPtr theDialog,
DialogItemIndex newItem);
EXTERN_API( OSErr )
SetDialogTracksCursor (DialogPtr theDialog,
Boolean tracks);
|
SetDialogDefaultItem ÇÕÉfÉtÉHÉãÉgÉ{É^ÉìÅAǬNjÇË return
Ç®ÇÊÇ— enter
ÉLÅ[Ç…âûìöÇ∑ÇÈÉ{É^ÉìÇê›íËǵNjÇ∑ÅBÇ‹ÇΩÅAÉ{É^ÉìÇÃé¸àÕÇ…ÉfÉtÉHÉãÉgÉäÉìÉO
(ëæê¸) Çï`âÊǵNjÇ∑ÅB
SetDialogCancelItem
ÇÕÉLÉÉÉìÉZÉãÉ{É^ÉìÇê›íËǵNjÇ∑ÅBÉLÉÉÉìÉZÉãÉ{É^ÉìÇÉfÉtÉHÉãÉgÉ{É^ÉìÇΔǵǃê›íËÇ∑ÇÈDZÇΔLJâ¬î\Ç≈Ç∑ÅBÉLÉÉÉìÉZÉãÉ{É^ÉìÇÕ
esc ÉLÅ[Ç®ÇÊÇ— command-ÉsÉäÉIÉh
(džÇÈÇ¢ÇÕåãâ ìIÇ…ÉsÉäÉIÉhÇÃÉLÅ[ÉRÅ[ÉhÇê∂ê¨Ç∑ÇÈëgÇ›çáÇÌÇπ)
ÉLÅ[Ç…âûìöǵNjÇ∑ÅB
SetDialogTracksCursor
ÇÕÅAÉJÅ[É\ÉãÇ™ÉeÉLÉXÉgï“èWÉtÉBÅ[ÉãÉhÇÃíÜÇ…ì¸Ç¡ÇΩÇΔǴDžǪÇÃå`èÛÇñÓàÛÇ©ÇÁ
I ÉrÅ[ÉÄÇ…ïœçXÇ∑ÇÈÇΩÇfl
(džÇÈÇ¢ÇÕÅAÉJÅ[É\ÉãÇ™ÉeÉLÉXÉgï“èWÉtÉBÅ[ÉãÉhÇÃäOÇ…èoÇΩÇΔǴDžǪÇÃå`èÛÇ
I ÉrÅ[ÉÄÇ©ÇÁñÓàÛÇ…ïœçXÇ∑ÇÈÇΩÇfl) ÅAÉJÅ[É\ÉãÇÃí«ê’ÇçsǧÇÊǧDž
Dialog Manager Ç…éwé¶ÇµÇ‹Ç∑ÅB
GetStdFilterProc Ç®ÇÊÇ— StdFilterProc
åƒÇ—èoǵÇÕã¶í≤ǵǃìÆçÏǵÅAÉ_ÉCÉAÉçÉOÇä«óùÇ∑ÇÈçÏãΔÇÃëÂïîï™Ç
Dialog Manager Ç…îCÇπÇÈDZÇΔÇâ¬î\DžǵNjÇ∑ÅBDialog Manager
ÇÃÉfÉtÉHÉãÉgÇÃìÆçÏÇ™ïKóvÇ»ÇΔÇ´Ç…ÇÕïKÇ∏ StdFilterProc
ä÷êîÇåƒÇ—èoǵNjÇ∑ÅB
íçà”:
DZÇÍÇÁÇÃåƒÇ—èoǵÇìKêÿÇ…ìÆçÏÇ≥ÇπÇÈÇ…ÇÕÅAïWèÄÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅBé©ìÆìIÇ»ÉJÅ[É\ÉãÇÃí«ê’ÅAÉfÉtÉHÉãÉgÉ{É^ÉìÇàÕÇfiëæê¸ÇÃï`âÊÅAÇ®ÇÊÇ—ÅgOKÅhÇ®ÇÊÇ—ÅgÉLÉÉÉìÉZÉãÅhÉ{É^ÉìÇ…ëŒâûÇ∑ÇÈÉLÅ[ëÄçÏÇÕÅAïWèÄÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoǵÇΩèÍçáÇÃÇ›ÉAÉNÉeÉBÉuÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅADZÇÍÇÁÇÃåƒÇ—èoǵÇÕ
System 7 Ç…å≈óLÇÃLJÇÃÇ≈džÇËÅASystem 7
ÇÊÇËëOÇÃÉVÉXÉeÉÄÉoÅ[ÉWÉáÉìÇ≈égópÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB
|
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
åƒÇ—èoǵÇÃégÇ¢ï˚
DZÇÍÇÁÇÃåƒÇ—èoǵÇégópÇ∑ÇÈÇΩÇflÇ…ÇÕÅAÉfÉxÉçÉbÉpÇÃê”îCÇ≈é·ä±ÇÃèÄîıÇçsǧïKóvǙdžÇËÇ‹Ç∑ÅBÇ‹Ç∏ÅAñ⁄ìIÇÃÉ_ÉCÉAÉçÉOÇçÏê¨ÇµÇΩå„Ç≈ÅAÇ«ÇÃçÄñ⁄ÇÉfÉtÉHÉãÉgÇ®ÇÊÇ—ÉLÉÉÉìÉZÉãçÄñ⁄DžǵÇΩǢǩÇ
Dialog Manager
Ç…éwé¶Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBÉLÉÉÉìÉZÉãçÄñ⁄ÇΔǵǃëIëǵÇΩÉ{É^ÉìÇÕÅAesc
ÉLÅ[Ç‹ÇΩÇÕ Command-.
ÉLÅ[Ç…ÇÊǡǃëIëÇ≥ÇÍÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAÉfÉtÉHÉãÉgÇΔǵǃéwíËǵÇΩÉ{É^ÉìÇÕÅAreturn
Ç‹ÇΩÇÕ enter
ÉLÅ[Ç…ÇÊǡǃëIëÇ≥ÇÍÇÈÇÊǧDžǻÇËÅAǪÇÃÉ{É^ÉìÇÃé¸àÕÇ…ÇÕïWèÄìIÇ»ëæÇ¢ã´äEê¸Ç™ï`âÊÇ≥ÇÍÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBÇ‹ÇΩÅAǪÇÍǺÇÍÇÃÉ{É^ÉìÇÕìKêÿÇ»ÉLÅ[Ç™âüÇ≥ÇÍÇΩÇΔÇ´Ç…ÉnÉCÉâÉCÉgï\é¶Ç…Ç≥ÇÍÇ‹Ç∑ÅB
SetDialogTracksCursorÇÕÅAÉ}ÉEÉXÉJÅ[É\ÉãÇ™É_ÉCÉAÉçÉOÇÃÇ«ÇÃïîï™Ç…džÇÈǩDžǵÇΩǙǡǃÅADialog
Manager
Ç™ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ë„ÇÌǡǃÉJÅ[É\ÉãÇê›íËÇ∑ÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBSetDialogTracksCursor
åƒÇ—èoǵDžÅutrueÅvílÇìnÇ∑ÇΔÅADialog Manager
ÇÕÉ_ÉCÉAÉçÉOì‡Ç≈ÇÃÉJÅ[É\ÉãÇÃà íuÇèÌÇ…É`ÉFÉbÉNÇ∑ÇÈÇÊǧDžǻÇËÅAÉJÅ[É\ÉãÇ™ï“èWçsÇÃè„Ç…à⁄ìÆÇ∑ÇÈÇΔÅAÉJÅ[É\ÉãÇÃå`èÛÇ
I
ÉrÅ[ÉÄÇ…ïœçXǵNjÇ∑ÅBÉJÅ[É\ÉãǙǪÇÃëºÇÃèÍèäDždžÇÈÇΔÇ´ÅADialog
Manager ÇÕÉJÅ[É\ÉãÇÃå`èÛÇïWèÄìIÇ»ñÓàÛÇ…ê›íËǵNjÇ∑ÅB
éüÇÃÉTÉìÉvÉãÉRÅ[ÉhÇÕÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇ≈ê‡ñæÇµÇΩä÷êîÇÃåƒÇ—èoǵï˚ñ@ÇãÔëÃìIÇ…é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB
/* ModalDialog ÉãÅ[ÉvÇ…ì¸ÇÈëOÇ…é·ä±ÇÃèÄîıÇçsǧ */
ModalFilterUPP filterProcUPP;
myDialogPtr = GetNewDialog (kMyDialogID, nil, (WindowPtr)-1);
/* OK É{É^ÉìÇ™ÉfÉtÉHÉãÉgÇ≈džÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
myErr = SetDialogDefaultItem (myDialogPtr, ok);
/* ÉLÉÉÉìÉZÉãÉ{É^ÉìÇ™ÉLÉÉÉìÉZÉãçÄñ⁄Ç≈džÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
myErr = SetDialogCancelItem (myDialogPtr, cancel);
/* DZÇÃÉ_ÉCÉAÉçÉOÇ…ÇÕï“èWçÄñ⁄ǙdžÇÈÇΩÇflÅAÉ}ÉEÉXÉJÅ[É\ÉãÇ™ï“èWçsÇÃè„DždžÇÈÇΔÇ´Ç…ÅA
ǪÇÃå`èÛÇ I ÉrÅ[ÉÄÇ…ïœçXÇ∑ÇÈDZÇΔÇ Dialog Manager Ç…éwé¶Ç∑ÇÈ */
myErr = SetDialogTracksCursor (myDialogPtr, true);
filterProcUPP = NewModalFilterProc (ModalDialogFilter);
do {
ModalDialog (filterProcUPP, &hitItem);
switch (hitItem) {
case ...:
break;
case ...:
break;
default:
}
} while (hitItem != ok && hitItem != cancel);
DisposeRoutineDescriptor (filterProcUPP);
ñ⁄ìIÇÃÉÇÅ[É_ÉãÉ_ÉCÉAÉçÉOÉtÉBÉãÉ^ÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
Boolean ModalDialogFilter (DialogPtr theDialog,
EventRecord *theEvent, short *itemHit) {
Boolean result = false;
OSErr err = noErr;
ModalFilterUPP standardProc;
if ((theEvent->what == updateEvt) &&
(WindowPtr)theEvent->message != theDialog) {
err = DispatchWindowUpdate ((WindowPtr)theEvent->message);
} else if ((theEvent->what == activateEvt) &&
(WindowPtr)theEvent->message != theDialog) {
DoActivate (theEvent, true);
} else {
err = GetStdFilterProc (&standardProc);
if (err == noErr) {
result = CallModalFilterProc (standardProc, theDialog, theEvent, itemHit);
}
}
return result;
}
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
åãò_
DZÇÍÇÁÇà Dialog Manager åƒÇ—èoǵÇégópÇ∑ÇÈDZÇΔÇ≈
(ÉtÉBÉãÉ^ÇégópǵǃǢǻǢÇΔÇ´Ç≈LJ)ÅAÉ_ÉCÉAÉçÉOÇ…ÇÊÇËàÍä—ǵÇΩÉÜÅ[ÉUÉCÉìÉ^ÉtÉFÅ[ÉXÇó^ǶÇÈDZÇΔÇ™Ç≈Ç´ÅAÉfÉxÉçÉbÉpé©êgÇ™Ç∑Ç◊ǃÇÃèàóùÇé©ï™Ç≈çsǧÇΔÇ´Ç…î‰Ç◊ÇÍÇŒÅAǩǻÇËÇÃçÏãΔéûä‘ÇêflñÒÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
Å@
éQçlï∂å£
â¸í˘ÇÃóöó
- 1991îN10åéÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃèâî≈Ç™ÅuTechnote TB 37ÅvÇΔǵǃåˆäJÇ≥ÇÍNjǵÇΩÅB
- 1991îNÇΔ1999îNÇ…ÉTÉìÉvÉãÉRÅ[ÉhÇÃí«â¡ÇΔâ¸í˘Ç™çsÇÌÇÍNjǵÇΩÅB
- 1999îN1åéÅAíÒé¶ÇµÇΩÉAÉCÉfÉAÇÇÊÇËÇÊÇ≠êÆóùÇ∑ÇÈÇΩÇflÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇÃì‡óeÇÕçXêVÇ≥ÇÍNjǵÇΩÅB
|